// 题目描述
// 某国为促进城市间经济交流，决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市，通过道路网络连接，网络中的道路仅允许从某个城市单向通行到另一个城市，不能反向通行。
// 网络中的道路都有各自的运输成本和政府补贴，道路的权值计算方式为：运输成本 - 政府补贴。权值为正表示扣除了政府补贴后运输货物仍需支付的费用；权值为负则表示政府的补贴超过了支出的运输成本，实际表现为运输过程中还能赚取一定的收益。
// 请找出从城市 1 到城市 n 的所有可能路径中，综合政府补贴后的最低运输成本。如果最低运输成本是一个负数，它表示在遵循最优路径的情况下，运输过程中反而能够实现盈利。

// 城市 1 到城市 n 之间可能会出现没有路径的情况，同时保证道路网络中不存在任何负权回路。

// 输入描述
// 第一行包含两个正整数，第一个正整数 n 表示该国一共有 n 个城市，第二个整数 m 表示这些城市中共有 m 条道路。 
// 接下来为 m 行，每行包括三个整数，s、t 和 v，表示 s 号城市运输货物到达 t 号城市，道路权值为 v （单向图）。

// 输出描述
// 如果能够从城市 1 到连通到城市 n， 请输出一个整数，表示运输成本。如果该整数是负数，则表示实现了盈利。如果从城市 1 没有路径可达城市 n，请输出 "unconnected"。

// 输入示例
// 6 7
// 5 6 -2
// 1 2 1
// 5 3 1
// 2 5 2
// 2 4 -3
// 4 6 4
// 1 3 5
// 输出示例
// 1
// 提示信息
// 示例中最佳路径是从 1 -> 2 -> 5 -> 6，路上的权值分别为 1 2 -2，最终的最低运输成本为 1 + 2 + (-2) = 1。

// 时间复杂度： O(N * E) , N为节点数量，E为图中边的数量
// 空间复杂度： O(N) ，即 minDist 数组所开辟的空间
// 题意说明了，本题中没有负向环。如果有负向环，可以一直循环取到最小的值
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    line = await readline();
    let [n, edge] = line.split(' ').map(Number),
        graph = [],
        minDist = new Array(n + 1).fill(Number.MAX_VALUE),
        start = 1;

    minDist[start] = 0;
    while (line = await readline()) {
        // 收集所有路径和权值到图中
        graph.push(line.split(' ').map(Number))
    }

    // 进行n-1次松弛，第n次松弛可以确认距离顶点n条边的最小距离和
    for (let i = 0; i < n; i++) {
        let update = false
        for (let [left, right, val] of graph) {
            if (minDist[left] !== Number.MAX_VALUE && minDist[left] + val < minDist[right]) {
                minDist[right] = minDist[left] + val
                update = true
            }
        }
        if(!update) break;
    }

    console.log(minDist[n] === Number.MAX_VALUE ? "unconnected" : minDist[n])

}()